package panel;



import java.awt.Graphics;
import java.util.ArrayList;

import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JViewport;

import org.uc3m.ed.interfaz_grafica.ventana.PanelDibujo;
import org.uc3m.ed.interfaz_grafica.ventana.VentanaPrincipal;
import org.uc3m.ed.tad.ITAD;

import dibujo.DibujoArray;


public class PanelArray extends PanelDibujo{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	/**
	 * gestor de los scrolles
	 */
	private JViewport _gestorDeScroll;
	
	/**
	 * 
	 */
	private DibujoArray _dibujoArbol;
	
	/**
	 * panel del scroll
	 */
	private JScrollPane _panelExtensible; 

	/**
	 * 
	 */
	private ArrayList<Integer> _arrayHeap;
	
	/**
	 * 
	 */
	private JDialog _apuntador;
	
	/**
	 * 
	 */
	public PanelArray ()
	{
		super();
		_dibujoArbol= new DibujoArray(this);
		_apuntador=new JDialog();
		
		_panelExtensible= new JScrollPane();
		this.gestionScroll(this);
		_apuntador.add(_panelExtensible);
		
		
		
	}
	
	/* (non-Javadoc)
	 * @see org.uc3m.ed.interfaz_grafica.ventana.PanelDibujo#paint(java.awt.Graphics)
	 */
	@Override
	public  void paint (Graphics grafico) {
		try 
		{
			grafico.clearRect(0,0, getWidth(),getHeight());
			if (_arrayHeap!=null)
				_dibujoArbol.dibujar(grafico,_arrayHeap);
		}catch(Exception e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::PanelArray ERROR::1::"+e.toString()+"\n");
		}catch(Error e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::PanelArray ERROR::2::"+e.toString()+"\n");
		}
		
	}
	

	/* (non-Javadoc)
	 * @see org.uc3m.ed.interfaz_grafica.ventana.PanelDibujo#setEstructura(org.uc3m.ed.tad.ITAD)
	 */
	@Override
	public void setEstructura(ITAD<Integer> estructura) {
	
		
	}
	public void setArray (ArrayList<Integer> array)throws Exception,Error
	{
		_arrayHeap=array;
		if (_arrayHeap!=null)
		{
			_apuntador.setVisible(true);
			_apuntador.setSize(600, 150);
			_apuntador.setLocation(400, 600);
			_apuntador.repaint();
		}
	}
	
	/**
	 * Metodo que se encarga de configurar la politica de movimiento y refresco de  pantalla 
	 * 
	 * @param componente elemento grafico sobre el que se quiere aplicar los scrolls
	 */
	public void gestionScroll (JComponent componente){
		try
		{
			_gestorDeScroll= new JViewport();
		    _panelExtensible.setViewport(_gestorDeScroll);
		    _gestorDeScroll.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
		    _gestorDeScroll.setView(componente);	
		}catch(Exception e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::PanelArray ERROR::3::"+e.toString()+"\n");
		}catch(Error e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::PanelArray ERROR::4::"+e.toString()+"\n");
		}
		
	}

	/* (non-Javadoc)
	 * @see org.uc3m.ed.interfaz_grafica.ventana.PanelDibujo#getEstructura()
	 */
	@Override
	public ITAD<Integer> getEstructura(){
		return null;
	}
}
